//package com.zdp.rocketmq.consumer.order;
//
//import com.zdp.rocketmq.config.JmsConfig;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
//import org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyContext;
//import org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyStatus;
//import org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly;
//import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
//import org.apache.rocketmq.common.message.MessageExt;
//import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
//import org.springframework.beans.factory.InitializingBean;
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//
///**
// * @author sesshomaru
// * @date 2021/6/21
// */
//@Slf4j
//@Component
//public class OrderConsumer4 implements InitializingBean {
//
//    private DefaultMQPushConsumer consumer;
//
//    private String consumerGroup = JmsConfig.ORDER_CONSUMER_GROUP;
//
//    @Override
//    public void afterPropertiesSet() throws Exception {
//        consumer = new DefaultMQPushConsumer(consumerGroup);
//        consumer.setNamesrvAddr(JmsConfig.NAME_SERVER);
//        consumer.setInstanceName("OrderConsumer4");
//        consumer.setMessageModel(MessageModel.CLUSTERING);
//        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
//        consumer.subscribe(JmsConfig.ORDER_TOPIC, "*");
//        // MessageListenerOrderly 可以看做是给queue上了锁 因为consumer分配到的queue是一定的，这样就保证了消费的顺序性, 保证单个queue是按顺序一个一个消费掉
//        consumer.registerMessageListener(new MessageListenerOrderly() {
//            @Override
//            public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {
//                MessageExt msg = msgs.get(0);
//                try {
//                    String topic = msg.getTopic();
//                    String body = new String(msg.getBody(), "utf-8");
//                    String tags = msg.getTags();
//                    String keys = msg.getKeys();
//                    log.info("OrderConsumer4 顺序消费结果 topic=" + topic + ", tags=" + tags + ", keys=" + keys + ", msg=" + body);
//                    return ConsumeOrderlyStatus.SUCCESS;
//                } catch (Exception e) {
//                    e.printStackTrace();
//                    return ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT;
//                }
//            }
//        });
//
//        consumer.start();
//
//       log.info("OrderConsumer4 start.....");
//    }
//}
